package design_pattern.template;

/**
 * Created by WeiDingKuo on 2017/10/26 14:19
 */
public abstract class AbstractTemplate {
    //抽象方法，将具体方法放到子类中去实现
    protected abstract void method1();

    protected abstract void method2();

    //钩子方法，非final类型，可以被子类重写，从而控制操作流程
    protected boolean hookMethod() {
        return true;
    }

    //模板方法抽取公共方法，final类型，不能重写
    public final void dosomething() {
        if (hookMethod()) {
            method1();
            method2();
        } else {
            method1();
        }
    }
}
